package com.itheima.d1_extends.demo02;

//目标：了解实现继承关系时的注意事项
public class Demo {
    public static void main(String[] args) {
        /*
         * 注意事项：
         *      只能单继承，不能多继承
         *      可以多层继承
         *      子类可以继承（直接访问）父类的非私有属性和功能
         *      任何一个类都直接或者间接的继承自Object类
         */
        //1.注意：只能单继承，不能多继承：一个子类只能有一个父类，不能同时继承多个类！
        //需求：尝试让Son同时继承Father和GrandFather类，让Son拥有这两个类的功能！结果：报错！

        //2.注意：Java允许多层继承，一个类可以有一个父类，但父类也可以有父类！
        //解决：先让Son继承Father，然后让Father继承GrandFather

        //3.测试
        Son son = new Son();
        son.drink();
        son.smoke();

        //4.注意：子类可以继承（直接访问）父类的非私有属性和功能
        //需求：尝试用son对象访问其父类的私有属性
        //System.out.println(son.name);

        //5.注意：任何一个类都直接或者间接的继承自Object类
        //需求：此时GrandFather类中只有一个smoke方法，尝试创建对象，看看有没有其他方法可以使用
        GrandFather grandFather = new GrandFather();
        grandFather.smoke();

        //可以调用GrandFather类中不存在的方法，只能说明GrandFather有一个默认的父类，它有hashCode()
        int hash = grandFather.hashCode();
        //hashCode()方法可以拿到该对象在堆内存的十进制地址值！
        System.out.println(hash);

        //任何一个类都直接或间接继承Object，好处是作为一个类，哪怕不写任何方法，也有基本的功能可以使用！
    }
}
